package test;

import java.awt.*;
import java.util.Vector;

import javax.swing.JPanel;

//绘制类
public class MyPanel extends JPanel implements Runnable {

    Map map = new Map();//创建地图对象
    Plane plane = new Plane();//创建飞机对象
    Equip equip = new Equip(); //创建装备对象
    Enemy enemy;

    Vector<Enemy> enemys = new Vector<Enemy>();//npc的集合
    int enemyCount = 18;  //控制敌机生成
    Vector<Bullet> bullets = new Vector<Bullet>();//子弹的集合
    int bulletCount = 0;
    long start;     //计时开始时间
    int bulletTime = 10000; //子弹效果时间
    int flag = 0; //技能
    int enemyCate = 0;  //控制敌机图像
    //重写
    public void paint(Graphics g) {//绘制

        map.paint(g);//绘制地图
        if(plane.flag!=1) {
            plane.paint(g);//绘制飞机
            equip.paint(g);//绘制装备
        }

        for (int i = 0; i < bullets.size(); i++) {//遍历集合
            bullets.get(i).paint(g);//绘制每一个子弹的对象
        }

        for (int i = 0; i < enemys.size(); i++) {  //遍历敌机
            enemys.get(i).paint(g);
        }

        //绘制分数
        g.setColor(Color.white);
        g.setFont(new Font("Verdang",Font.BOLD,20));
        g.drawString("score: "+plane.score,10,30);
        g.drawString("HP: "+plane.hp,10,55);

        //判断游戏是否开始
        if(plane.flag == 1){
            enemys.clear();
            bullets.clear();
            g.setFont(new Font("Verdang",Font.BOLD,40));
            g.drawString("开始游戏",150,500);
            g.setFont(new Font("Verdang",Font.BOLD,20));
            g.drawString("按 Enter 开始游戏",150,540);
        }

    }

    @Override
    public void run() {
        while (true) {
            try {
                Thread.sleep(50);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            map.move();//调用地图的移动方法
            plane.move();//调用飞机的移动方法
            if(plane.flag != 1) {
                addBullet();
                addEnemy();  //增加

                for (int i = 0; i < bullets.size(); i++) {//遍历子弹集合
////				Bullet bullet =bullets.get(i);
////				bullet.move();
                    bullets.get(i).move(bullets);//获取每一个元素(对象)并调用move方法
                }
                for (int i = 0; i < enemys.size(); i++) {  //npc集合
                    if ((Math.abs(plane.x - enemys.get(i).x) < 10) && (plane.y - enemys.get(i).y) < 10) {
                        plane.hp -= 1000;
                    }
                    enemys.get(i).move(enemys); //npc移动
                }
                for (int j = 0; j < bullets.size(); j++) {
                    for (int i = 0; i < enemys.size(); i++) {  //npc集合
                        if ((Math.abs(bullets.get(j).x - enemys.get(i).x) < 15) && (bullets.get(j).y - enemys.get(i).y) < 15) {
                            enemys.get(i).status = 1;   //子弹击中敌机
                            //enemys.get(i).count++;
                            plane.score++;
                        }
                    }
                }

            }

            if(flag == 1){
                enemys.clear();   //炸弹技能，清空敌机
                flag = 0;
                plane.score += 666;
            }

			/*
             * 判断是否捡装备
			 */
            if ((Math.abs(equip.x - plane.x) < 30) && (Math.abs(equip.y - plane.y) < 30)) {
                if (equip.equipClass == 0) {   //子弹装备  延长 双倍子弹时间
                    equip.status = 0;
                    plane.bulletCate = 2;    //飞机的 子弹种类 双倍弹
                    start = System.currentTimeMillis();
                } else {
                    equip.status = 0;
                }
            }

            if ((System.currentTimeMillis() - start) > bulletTime) {    //buffer时间限制
                plane.bulletCate = 1;
            }
            repaint();//重绘
        }
    }

    //创建子弹
    void addBullet() {
        bulletCount++;//计数器
        if (bulletCount % 2 == 0) {//控制子弹的生成
            Bullet bullet = new Bullet(plane);//创建子弹对象
            bullets.add(bullet);//讲子弹对象那添加到集合中
            bulletCount = 0;//重置计数器
        }
    }

    //生成敌机
    void addEnemy() {
        if (enemyCount % 15 == 0) {  //根据时间 控制生成飞机的 速度
            switch (enemyCate){  //控制飞机生成 25：5：1 25个小飞机 5个中飞机 1个大飞机
                case 5:
                    enemy = new Enemy(1);
                    break;

                case 10:
                    enemy = new Enemy(1);
                    break;
                case 15:
                    enemy = new Enemy(1);
                    break;

                case 20:
                    enemy = new Enemy(1);
                    break;

                case 25:
                    enemy = new Enemy(2);
                    enemyCate=0;
                    break;
                default:
                    enemy = new Enemy(0);
                    break;

            }
            enemyCate++;
            enemys.add(enemy);
            enemyCount = 0;
        }
        enemyCount++;

    }

}
